/**
*
*  URL encode / decode
*  http://www.webtoolkit.info/
*
**/
 
var Url = {
 
	// public method for url encoding
	encode : function (string) {
		return escape(this._utf8_encode(string));
	},
 
	// public method for url decoding
	decode : function (string) {
		return this._utf8_decode(unescape(string));
	},
 
	// private method for UTF-8 encoding
	_utf8_encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
 
		for (var n = 0; n < string.length; n++) {
 
			var c = string.charCodeAt(n);
 
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
 
		}
 
		return utftext;
	},
 
	// private method for UTF-8 decoding
	_utf8_decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;
 
		while ( i < utftext.length ) {
 
			c = utftext.charCodeAt(i);
 
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
 
		}
 
		return string;
	}
 
}

var Comment = {
	showForm : function(relId, sTypeName, objectId) {
		var __self = this;
		
		var oWrap = document.getElementById('new_comment_' + relId);
		
		if (typeof oWrap == 'undefined') {
			return false;
		}
		
		if ($(oWrap).css('display') == '') {
			return false;
		}
		
	
		var oForm = $('<form>').attr({
				method: 'post',
				action: 'javascript:void(0);'
			})
			.submit(function() {
				/*alert(relId+'\n'+sTypeName+'\n'+objectId);
				return false;*/
				__self.post (relId, sTypeName, objectId);
				return false;
			})
			.append(
				$('<textarea>').attr({
					id: 'comment_text_' + relId,
					rows: 3
				})
			)
			.append(
				$('<div>')
					.attr({
						class: 'error',
						id: 'comment_error_' + relId
					})
					.css('display', 'none')
					.text('Вы должны сначала написать комментарий')
			);
			
		
		var oButtonsDiv = $('<div>')
			.addClass('buttons')
			.append(
				$('<input>').attr({
					type: 'submit',
					value: 'Написать'
				})
			)
			.append(
				$('<input>')
					.attr({
						type: 'button',
						value: 'Отмена'
					})
					.click(function() {
						$(oWrap)
							.html('')
							.hide();
					})
			)
			
		oForm.append(oButtonsDiv);
		
		$(oWrap)
			.empty()
			.append(oForm)
			.show();
	},
	
	delete : function(id) {
		$.ajax ({
			url: baseURI+'/comments/ajax_delete/'+id+'?scode='+scode,
			dataType: 'xml',
			type: 'get',
			error: function () { new Error ('Произошла ошибка!');  },
			success: function (xml) {
				var result = $(xml).find('result').text();
				
				if (result == '0') {
					new Error ('Произошла ошибка!');
				} else {
					$('#comment_'+id)
						.addClass('deleted')
						.html('<p>Комментарий удален</p>');
				}
			}
		});
	},
	
	vote : function(id, mark) {
		if (mark != 1) {
			mark = 0;
		}
		
		$.ajax ({
			url: baseURI+'/comments/ajax_vote/'+id+'/'+mark+'?scode='+scode,
			dataType: 'xml',
			type: 'get',
			error: function () { new Error ('Произошла ошибка!');  },
			success: function (xml) {
				var result = $(xml).find('result').text();
				
				if (result == '0') {
					new Error ('Произошла ошибка!');
				} else {
					var rating = $(xml).find('format').text();
					
					$('#comment_rating_'+id+' > span.number').text (rating);
					
					if (mark == 1) {
						$('#comment_rating_'+id+' > a.minus').addClass('cant');
						$('#comment_rating_'+id+' > a.plus').addClass('voted');
					} else {
						$('#comment_rating_'+id+' > a.minus').addClass('voted');
						$('#comment_rating_'+id+' > a.plus').addClass('cant');
					}
					
					$('#comment_rating_'+id+' > a.minus')
						.attr('onclick', '')
						.click(function() { new Error('Повторное голосование запрещено'); return false; });
					
					$('#comment_rating_'+id+' > a.plus')
						.attr('onclick', '')
						.click(function() { new Error('Повторное голосование запрещено'); return false; });
				}
			}
		});
	},
	
	post : function() {
		new Error('Действие не определено');
	}
};